import re


def senior_func():
    # search 只能搜第一个
    ret = re.search(r"\d+", "阅读次数为 9999,点赞888")
    print(ret.group())  # 9999

    print("-" * 50)

    # findall 搜索出所有符合条件的字符串，将结果存储在列表中
    ret = re.findall(r"\d+", "python = 9999, c = 7890, c++ = 12345")
    print(ret)  # ['9999', '7890', '12345']

    print("-" * 50)

    # sub 将匹配到的数据进行替换
    text = "apple apple apple apple"
    pattern = r"apple"
    replacement = "orange"

    new_text = re.sub(pattern, replacement, text, count=3)
    print(new_text)  # orange orange orange apple

    print("-" * 50)

    # split 根据匹配进行切割字符串，并返回一个列表
    # 以:或者' '作为分割标志
    ret = re.split(r":| ", "info:xiaoZhang 33 shandong")
    print(ret)


def find_second_match(pattern, text):
    matches = re.finditer(pattern, text)
    try:
        next(matches)  # 跳过第一个匹配项
        second_match = next(matches)
        return second_match.group()  # 获取第二个匹配项
    except Exception as res:
        print(res)


def use_finditer():
    # 示例用法
    text = "abc123def456ghi789"
    pattern = r"\d+"
    second_match = find_second_match(pattern, text)
    print(second_match)  # 456


def use_findall():
    s = 'hello world, now is 2020/7/20 18:48, 现在是2020年7月20日18时48分。'
    ret_s = re.sub(r'年|月', r'/', s)
    # ret_s = 'hello world, now is 2020/7/20 18:48, 现在是2020/7/20日18时48分。'
    ret_s = re.sub(r'日', r' ', ret_s)
    # ret_s = 'hello world, now is 2020/7/20 18:48, 现在是2020/7/20 18时48分。'
    ret_s = re.sub(r'时', r':', ret_s)
    # ret_s = 'hello world, now is 2020/7/20 18:48, 现在是2020/7/20 18:48分。'
    ret_s = re.sub(r'分', r'', ret_s)
    # ret_s = 'hello world, now is 2020/7/20 18:48, 现在是2020/7/20 18:48。'
    print(ret_s)

    # ########## 重新看
    # findall 内部的设计机制，在分组前面加?:
    pattern = re.compile(r'\d{4}/[01]?[0-9]/[1-3]?[0-9]\s(?:0[0-9]|1[0-9]|2[0-4])\:[0-5][0-9]')
    ret = pattern.findall(ret_s)
    print(ret)
    pattern1 = re.compile(r'\d{4}/[01]?[0-9]/[1-3]?[0-9]\s(0[0-9]|1[0-9]|2[0-4])\:[0-5][0-9]')
    # search 没问题
    ret1 = pattern1.search(ret_s)
    print(ret1.group())


def use_sub():
    # """ 长字符串 """
    long_text = """<div>
            <p>岗位职责：</p>
    <p>完成推荐算法、数据统计、接口、后台等服务器端相关工作</p>
    <p><br></p>
    <p>必备要求：</p>
    <p>良好的自我驱动力和职业素养，工作积极主动、结果导向</p>
    <p>&nbsp;<br></p>
    <p>技术要求：</p>
    <p>1、一年以上 Python 开发经验，掌握面向对象分析和设计，了解设计模式</p>
    <p>2、掌握HTTP协议，熟悉MVC、MVVM等概念以及相关WEB开发框架</p>
    <p>3、掌握关系数据库开发设计，掌握 SQL，熟练使用 MySQL/PostgreSQL 中的一种<br></p>
    <p>4、掌握NoSQL、MQ，熟练使用对应技术解决方案</p>
    <p>5、熟悉 Javascript/CSS/HTML5，JQuery、React、Vue.js</p>
    <p>&nbsp;<br></p>
    <p>加分项：</p>
    <p>大数据，数理统计，机器学习，sklearn，高性能，大并发。</p>

            </div>
        """

    # [^>]* 直到>之前的所有字符
    # &nbsp; 非截断空白符
    # \s 空格
    ret = re.sub(r'<[^>]*>|&nbsp;|\n|\s', '', long_text)
    print(ret)


#
def use_greedy():
    s = "This is a number 234-235-22-423"
    ret = re.match(r".+(\d+-\d+-\d+-\d+)", s)
    print(ret.group(1))  # 4-235-22-423 贪婪读取，直到读到不能再读为止

    ret = re.match(r".+?(\d+-\d+-\d+-\d+)", s)
    print(ret.group(1))  # 234-235-22-423 加上?，使其变为非贪婪

    print(re.match(r"aa(\d+)", "aa2343ddd").group(1))

    print(re.match(r"aa(\d+?)", "aa2343ddd").group(1))

    print(re.match(r"aa(\d+)ddd", "aa2343ddd").group(1))

    print(re.match(r"aa(\d+?)ddd", "aa2343ddd").group(1))


def use_r():
    """
    r的作用, 原生字串
    """
    mm = "c:\\a\\b\\c"
    print(mm)
    print(re.match(r"c:\\", mm).group())


def use_option():
    # re.A 不让\w匹配汉字
    print(re.match(r'\w*', 'abc函', flags=re.A).group())  # abc
    # re.I 不区分大小写
    print(re.match(r'a*', 'aA', flags=re.I).group())  # aA
    # re.S 可以让.匹配上\n
    print(re.match(r'.*', 'abc\ndef', flags=re.S).group())
    # abc
    # def


if __name__ == '__main__':
    # senior_func()
    # use_finditer()
    # use_findall()
    # use_sub()
    # use_greedy()
    # use_r()
    use_option()
